package movimiento.patrones;

import movimiento.*;
import auxiliares.Vector;

/* 
 * Patron del movimiento circular. Hace al objeto describir una circunferencia del 
 * radio dado y, ademas, avanzar hacia donde indique su velocidad.
 */
public class Circular extends PatronMovimiento {
	private double angulo = 0;
	/* Delta de variacion del angulo en cada paso del movimiento */
	private double delta = 0.0125;
	private double radio;

	public Circular(int radio) {
		this.radio = radio;
	}

	@Override
	public Posicion calcularNuevaPosicion(Posicion posicion, Vector velocidad) {
		int xFinal, yFinal;
		int xInicial = posicion.getEnX();
		int yInicial = posicion.getEnY();
		double vX, vY;
		double wt = radio * delta;

		angulo = angulo + delta * Math.PI;
		/* Modifico el vector velocidad */
		vX = -radio * wt * Math.sin(angulo);
		vY = radio * wt * Math.cos(angulo);
		velocidad.setComponenteY((int) Math.round(vY + 1));

		xFinal = xInicial
				+ (int) (Math.round(vX) + velocidad.getComponenteX() * 0.4);
		yFinal = yInicial
				+ (int) (Math.round(vY) + velocidad.getComponenteY() * 0.4);
		return new Posicion(xFinal, yFinal);
	}

}
